﻿#region Using Statements
using Microsoft.Xna.Framework;
#endregion

namespace StarFox.ScreenComponents
{
    /// <summary>
    /// Defines an interface for starship input management
    /// </summary>
    public interface IShipInput
    {
        #region Pitch-Axis

        /// <summary>
        /// Checks for a "rotate up around pitch axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsPitchUp(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "rotate down around pitch axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsPitchDown(PlayerIndex playerIndex);

        #endregion

        #region Yaw-Axis

        /// <summary>
        /// Checks for a "rotate left around yaw axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsYawLeft(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "rotate right around yaw axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsYawRight(PlayerIndex playerIndex);

        #endregion

        #region Roll-Axis

        /// <summary>
        /// Checks for a "rotate left around roll axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsRollLeft(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "rotate right around roll axis" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsRollRight(PlayerIndex playerIndex);

        #endregion

        #region Move Up/Down

        /// <summary>
        /// Checks for a "move up" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsMoveUp(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "move down" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsMoveDown(PlayerIndex playerIndex);

        #endregion

        #region Move Right/Left

        /// <summary>
        /// Checks for a "move right" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsMoveRight(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "move left" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsMoveLeft(PlayerIndex playerIndex);

        #endregion              
        
        #region Boost/Brake

        /// <summary>
        /// Checks for a "boost" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsBoost(PlayerIndex playerIndex);

        /// <summary>
        /// Checks for a "brake" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsBrake(PlayerIndex playerIndex);

        #endregion

        #region Bomb

        /// <summary>
        /// Checks for a "bomb" input action.
        /// </summary>
        /// <param name="playerIndex">Specifies which player to read input from.</param>
        /// <returns>Input action performed.</returns>
        bool IsBomb(PlayerIndex playerIndex);

        #endregion

        #region Testing
#if DEBUG
        /// <summary>
        /// Resets starship rotation.
        /// </summary>
        /// <returns>Input action performed.</returns>
        bool IsResetShipRotation();

        /// <summary>
        /// Resets starship translation.
        /// </summary>
        /// <returns>Input action performed.</returns>
        bool IsResetShipTranslation();
#endif
        #endregion
    }
}
